/**
 * JWT工具模块，用于生成和验证JWT令牌
 * @module utils/jwt
 */

const jwt = require('jsonwebtoken');
const config = require('../config/config');

/**
 * 生成访问令牌
 * @param {Object} payload - 令牌载荷
 * @returns {string} JWT令牌
 */
function generateAccessToken(payload) {
  return jwt.sign(payload, config.jwtSecret, { expiresIn: config.jwtExpiresIn });
}

/**
 * 生成刷新令牌
 * @param {Object} payload - 令牌载荷
 * @returns {string} 刷新令牌
 */
function generateRefreshToken(payload) {
  return jwt.sign(payload, config.refreshTokenSecret, { expiresIn: config.refreshTokenExpiresIn });
}

/**
 * 验证访问令牌
 * @param {string} token - JWT令牌
 * @returns {Object|null} 解码后的载荷或null（如果验证失败）
 */
function verifyAccessToken(token) {
  try {
    return jwt.verify(token, config.jwtSecret);
  } catch (error) {
    return null;
  }
}

/**
 * 验证刷新令牌
 * @param {string} token - 刷新令牌
 * @returns {Object|null} 解码后的载荷或null（如果验证失败）
 */
function verifyRefreshToken(token) {
  try {
    return jwt.verify(token, config.refreshTokenSecret);
  } catch (error) {
    return null;
  }
}

module.exports = {
  generateAccessToken,
  generateRefreshToken,
  verifyAccessToken,
  verifyRefreshToken
}; 